#ifndef __HWICODEC_PF_H__
#define __HWICODEC_PF_H__

typedef int (*hwicodec_init_t)(hwicodec_t *h, hwicodec_param_t *param);
typedef void (*hwicodec_deinit_t)(hwicodec_t *h);
typedef int (*hwicodec_process_t)(hwicodec_t *h, hwicodec_io_t *io);
typedef int (*hwicodec_request_vbinfo_t)(hwicodec_t *h, hwicodec_vbinfo_t **vbinfo, int *vbnum);
typedef void (*hwicodec_release_vbinfo_t)(hwicodec_t *h, hwicodec_vbinfo_t *vbinfo);

typedef struct hwicodec_func {
	int (*validate_parameters)(hwicodec_t *h);
	int (*init)(hwicodec_t *h);
	int (*process)(hwicodec_t *h, hwicodec_io_t *input);
	void (*deinit)(hwicodec_t *h);
	int (*request_vbinfo)(hwicodec_t *h, hwicodec_vbinfo_t **vbinfo, int *vbnum);
	void (*release_vbinfo)(hwicodec_t *h, hwicodec_vbinfo_t *vbinfo);
} hwicodec_func_t;

extern hwicodec_func_t hwicodec_pf_h264e_m200;
extern hwicodec_func_t hwicodec_pf_h264e_t10;
extern hwicodec_func_t hwicodec_pf_h264e_t20;
extern hwicodec_func_t hwicodec_pf_h264e_t30;
extern hwicodec_func_t hwicodec_pf_h264e_t21;
extern hwicodec_func_t hwicodec_pf_jpege_m200;
extern hwicodec_func_t hwicodec_pf_jpege_t10;
extern hwicodec_func_t hwicodec_pf_jpege_t20;
extern hwicodec_func_t hwicodec_pf_jpegd_m200;
extern hwicodec_func_t hwicodec_pf_jpegd_t10;
extern hwicodec_func_t hwicodec_pf_jpegd_t20;
extern hwicodec_func_t hwicodec_pf_h265e_t30;

extern hwicodec_func_t *pf_array[C_PROT_MAX][C_SOC_MAX];

#endif
